//#include <iostream>
//using namespace std;
//
//class X
//{
//public:
//	X() { cout<<"X ctor\n"; }
//	virtual ~X() { cout<<"X dtor\n"; }
//	X(const X&) { cout<<"X copy ctor\n"; }
//	X& operator=(const X& other) { cout<<"X op=\n"; return *this; }
//};
//
//class Y
//{
//public:
//	Y() { cout<<"Y ctor\n"; }
//	virtual ~Y() { cout<<"Y dtor\n"; }
//
//	X f() const {
//		X x;
//		return x;
//	}
//
//	const X& g() const {
//		return m_x;
//	}
//
//private:
//	X m_x;
//};
//
//void main() {
//	Y y;
//
//	// 1
//	//X x = y.f();
//
//	// 2
//	//X x;
//	//x = y.f();
//
//	// 3
//	//y.f();
//
//	// 4
//	//X x = y.g();
//
//	int a = 17;
//}